package cn.edu.lcu.cs.javaprogramming.oop.innerclass.deprecated;

/**
 * 外部类内部类的演示
 *
 * @author ling
 * @date 2022/3/22 16:11
 */
public class OutterOld {

    private String something = "some thing in outter";
    private String somethingOutter = "some thing of outter";

    public void print() {
        System.out.println(something);

        // 外部类访问内部类的成员
        System.out.println(new Inner().something);
        // 课下作业：自行查阅资料

        // 定义局部内部类，作用域仅限于当前方法
        class LocalInner {
            private String something = "some thing in LocalInner";

            public void print() {
                System.out.println(something);

                System.out.println(OutterOld.this.something);
            }
        }

        LocalInner localInner = new LocalInner();
        localInner.print();
        // 方法直接访问局部内部类实例的成员，即使是私有成员
        System.out.println(localInner.something);
    }

    // 定义一个内部类，是外部类的成员，叫做成员内部类

    public /*static*/ class Inner {
        private String something = "some thing in inner";

        public void print() {
            System.out.println(something);

            // 内部类方法中访问外部类的成员
            // 不重名的成员
            System.out.println(somethingOutter);

            // 重名的成员，需要特殊的语法
            System.out.println(OutterOld.this.something);
        }
    }

}
